import pandas as pd
from DatetimeUtils import choose_day
from ListUtils import anti_join
import time

"""
工业生产者出厂价格指数
"""


def deal_append(query_start_, query_end_, engine, pro):
    """
    通过anti_join函数处理增量数据
    """
    source_list_ = pro.cn_ppi(start_m=query_start_, end_m=query_end_)
    # 最好是单元数组，不然merge之后会有问题。
    sql_ = 'select s.month from cn_ppi s WHERE s.month >= ' + query_start_ + ' and s.month <= ' + query_end_
    target_list_ = pd.read_sql(sql_, engine)
    if len(target_list_) == 0:
        # 数据库内未找到数据则全部添加
        source_list_.to_sql('cn_ppi', con=engine, index=False, index_label='month', if_exists='append')
        print('数据库内未找到数据则全部添加：(%s)' % source_list_)
    else:
        # 数据库内有历史数据则增量添加
        source_list_ = anti_join(source_list_, target_list_, 'month')

        # source_list = source_list[source_list['exists'] == False]
        if len(source_list_) > 0:
            print('增量：(%s)' % source_list_)
            # print(source_list)
            # source_list.drop(labels='exists',axis=1,inplace=True)
            source_list_.to_sql('cn_ppi', con=engine, index=False, index_label='month', if_exists='append')
    time.sleep(5)


def save_history_data_cn_ppi(engine, pro):
    """
    保存历史数据，通过对比添加数据
    """
    current_year = choose_day(0).strftime('%Y')
    start_year = 2011 # 完整记录从201101开始
    query_start = '%d' %start_year + '01'  # 查询开始
    query_end = current_year  + '12'  # 查询结束
    deal_append(query_start, query_end, engine, pro)





def query_cn_ppi(engine_, query_start_, query_end_):
    """
    获取相关CPI日数据
    :param engine_:
    :param query_start_:  起始时间
    :param query_end_:  结束时间
    :return:
    """
    sql_ = 'select s.*  from cn_ppi s  WHERE  s.`month` >= ' + query_start_ + ' and s.`month` <= ' + query_end_  + ' order by s.`month` asc'
    df_ = pd.read_sql(sql_, engine_)
    df_['month'] = pd.to_datetime(df_['month'], format='%Y%m', errors='ignore')
    return df_

